package com.awesome.shortcutdemo

import android.app.PendingIntent
import android.content.ComponentName
import android.content.Context
import android.content.Intent
import android.os.Bundle
import androidx.core.content.pm.ShortcutInfoCompat
import androidx.core.content.pm.ShortcutManagerCompat
import androidx.core.graphics.drawable.IconCompat

/**
 * Author: zhangjingfang
 * Email:zhangjingfang@jeejio.com
 * Date: 2022/5/6 4:42 下午
 * Description:类描述
 */
object ShortcutUtils {
    fun addShortcut(context: Context, cls: String, bundle: Bundle?,shortcutName:String,shortcutIcon:Int) {
        //创建Intent对象
        val shortcutIntent = Intent()
        //设置点击快捷方式，进入指定的Activity
        shortcutIntent.component = ComponentName(context.packageName, cls)
        //给Intent添加 对应的flag
        shortcutIntent.addFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS or Intent.FLAG_ACTIVITY_NEW_TASK)
        //传递参数
        bundle?.let {
            shortcutIntent.putExtras(bundle)
        }
        val resultIntent = Intent()
        //设置Action
        resultIntent.action = "com.android.launcher.action.INSTALL_SHORTCUT"
        //设置快捷方式的图标
        resultIntent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, Intent.ShortcutIconResource.fromContext(context, shortcutIcon))
        //设置快捷方式的名称
        resultIntent.putExtra(Intent.EXTRA_SHORTCUT_NAME, shortcutName)
        //设置启动的Intent
        resultIntent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent)
        //发送广播，通知系统创建桌面快捷方式
        context.sendBroadcast(resultIntent)
    }


    /**
     * 测试在android 6.0 和 android 8.0 系统上都可以
     * 使用androidx库，兼容高低系统版本
     */
    fun addShortcutCompat(context: Context, targetClass: Class<Any>) {
        if (ShortcutManagerCompat.isRequestPinShortcutSupported(context)) {
            val intent = Intent(context, targetClass)
            intent.action = Intent.ACTION_VIEW  //必须设置，否则报错
            intent.putExtra("key", "value")
//            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) //设不设置都行
//            intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP) //设不设置都行
            val pinShortcutInfo = ShortcutInfoCompat.Builder(context, "shortcutCompatId")
                .setShortLabel("shortCutCompat")
                .setLongLabel("desktopShotCutCompat")
                .setIcon(IconCompat.createWithResource(context, R.mipmap.maopao))
                .setIntent(intent)
                .build()
            val pinnedShortcutCallbackIntent = ShortcutManagerCompat.createShortcutResultIntent(
                context,
                pinShortcutInfo
            )
            val successCallback = PendingIntent.getBroadcast(
                context, /* request code */ 0,
                pinnedShortcutCallbackIntent, /* flags */ PendingIntent.FLAG_UPDATE_CURRENT
            )
            ShortcutManagerCompat.requestPinShortcut(
                context,
                pinShortcutInfo,
                successCallback.intentSender
            )
        }
    }
}